﻿using System;
using GigaSite.Domain.Entities;
using Newtonsoft.Json;

namespace GigaSite.Web.Areas.ControlPanel.Models
{
    /// <summary>
    /// Модель пользователя
    /// </summary>
    public class UserModel
    {
        /// <summary>
        /// Идентификатор пользователя
        /// </summary>
        [JsonProperty("id")]
        public long Id { get; set; }

        /// <summary>
        /// Идентичность пользователя - логин
        /// </summary>
        [JsonProperty("identity")]
        public string Identity { get; set; }

        /// <summary>
        /// Провайдер идентичности пользователя
        /// </summary>
        [JsonProperty("provider")]
        public string IdentityProvider { get; set; }

        /// <summary>
        /// Email пользователя
        /// </summary>
        [JsonProperty("email")]
        public string Email { get; set; }

        /// <summary>
        /// Уровень доступа пользователя
        /// </summary>
        [JsonProperty("access")]
        public int Access { get; set; }

        /// <summary>
        /// Имя
        /// </summary>
        [JsonProperty("firstName")]
        public string FirstName { get; set; }

        /// <summary>
        /// Фамилия
        /// </summary>
        [JsonProperty("lastName")]
        public string LastName { get; set; }

        /// <summary>
        /// Отчество
        /// </summary>
        [JsonProperty("surName")]
        public string SurName { get; set; }

        /// <summary>
        /// Город
        /// </summary>
        [JsonProperty("city")]
        public string City { get; set; }

        /// <summary>
        /// Персональный сайт пользователя
        /// </summary>
        [JsonProperty("website")]
        public string WebSite { get; set; }

        /// <summary>
        /// Описание пользователя
        /// </summary>
        [JsonProperty("description")]
        public string Description { get; set; }

        /// <summary>
        /// Заблокирован ли пользователь
        /// </summary>
        [JsonProperty("blocked")]
        public bool Blocked { get; set; }

        /// <summary>
        /// Ссылка на фотографию пользователя
        /// </summary>
        [JsonProperty("avatar")]
        public string Avatar { get; set; }

        /// <summary>
        /// Дата последней авторизации
        /// </summary>
        [JsonProperty("lastLogin")]
        public DateTime? LastLogin { get; set; }

        /// <summary>
        /// Дата регистрации
        /// </summary>
        [JsonProperty("dateCreated")]
        public DateTime? DateCreated { get; set; }

        /// <summary>
        /// Дата последней модификации
        /// </summary>
        [JsonProperty("dateModififed")]
        public DateTime? DateModified { get; set; }

        /// <summary>
        /// Простой конструктор
        /// </summary>
        public UserModel()
        {
        }

        /// <summary>
        /// Инициализирует модель пользователя из доменного объекта
        /// </summary>
        /// <param name="user">Пользователь</param>
        public UserModel(User user)
        {
            Id = user.Id;
            Identity = user.Identity;
            IdentityProvider = user.IdentityProvider;
            Email = user.Email;
            Access = user.Access;
            FirstName = user.FirstName;
            LastName = user.LastName;
            SurName = user.SurName;
            City = user.City;
            WebSite = user.WebSite;
            Description = user.Description;
            Blocked = user.Blocked;
            LastLogin = user.LastLogin;
            DateCreated = user.DateCreated;
            DateModified = user.DateModified;
        }
    }
}